草庐IT

C++ std::unordered_map 复杂度

全部标签

c++ - 合并多个 map

我已经在boost邮件列表中询问过这个问题,但我似乎并不清楚自己的意图。也可能是我没有完全理解如何才能做到这一点。我想在hana中合并多个map,看下面的代码示例:constexprautom1=hana::make_map(hana::make_pair("key1"_s,hana::type_c),hana::make_pair("key2"_s,hana::type_c));constexprautom2=hana::make_map(hana::make_pair("key3"_s,hana::type_c),hana::make_pair("key4"_s,hana::typ

c++ - std::regex 转义在正则表达式中使用的特殊字符

我正在创建一个std::regex(__FILE__)作为单元测试的一部分,该单元测试检查一些打印文件名的异常输出。在Windows上它失败了:regex_error(error_escape):Theexpressioncontainedaninvalidescapedcharacter,oratrailingescape.因为__FILE__宏扩展包含未转义的反斜杠。是否有比循环遍历结果字符串(即使用std算法或某些std::string函数)更优雅的方式来转义反斜杠? 最佳答案 文件路径可以包含许多在正则表达式模式中具有特殊含

c++ - 如何将用户输入(来自 std::cin)与字符串进行比较?

这个问题在这里已经有了答案:HowdoIproperlycomparestringsinC?(10个答案)关闭6年前。所以这听起来很简单,但我遇到了一些奇怪的行为。在我的程序中有如下代码:std::cout>ans;if(ans!="global")std::cout>"当我运行我的程序并在系统提示我输入时输入“global”时,程序返回:>>global为什么if语句的计算结果为true?

c++ - std::string not nothrow move assignable or comparable?

我在研究type_traits时,发现了std::string的这个奇怪属性:$cata.cpp#include#includestatic_assert(std::is_nothrow_move_assignable::value,"???");static_assert(noexcept(std::declval()==std::declval()),"???");$g++-std=c++14a.cppa.cpp:4:1:error:staticassertionfailed:???static_assert(std::is_nothrow_move_assignable::val

c++ - 在 C++11 中为包含 std::tuple 的对象键入删除

假设我有一个通用类Container,它包含任何类型的元组,并且有一个函数templateT&get();返回对元组中元素的引用。我非常简单的实现如下所示:templateclassContainer{std::tuplecontents;public:Container(constTs&...ts):contents(ts...){}templateT&get(){//TypeIndexissomemeta-programmingstructtofindindexofTinTsreturnstd::get::value>(contents);}};有没有什么好的类型删除技术可以在不改

c++ - C++ 标准是否为 unordered_set 定义了桶的结构?

当计算出unordered_set中某个元素的哈希值时,它会与其他不同但哈希值相同的元素一起放入“桶”中。我的经验是,这样一个桶中的元素是存储在一个单向链表中的。这意味着,在哈希函数不佳的存储桶内搜索时,它会变得非常慢。单向链表是标准的要求还是只是一种可能的实现方式?可以用set作为桶来实现unordered_set吗? 最佳答案 标准规定了要求和保证,但没有明确强制底层数据结构和算法。N4140§23.2.5[unord.req]/1Unorderedassociativecontainersprovideanabilityfor

c++ - 在主程序退出期间销毁等待 std::condition_variable 的线程的正确方法

我正在使用std::conditional_variable为多线程程序中的信号计时,以控制各个关键部分的流程。该程序可以运行,但在退出期间我不得不使用谓词(kill_==true)来避免破坏仍在等待std::conditional_variable::wait()的线程。我不知道它是否是销毁所有等待线程的正确方法,征求意见。这是一个代码片段:classtimer{//...timer(std::shared_ptrparent,constbool&kill):parent_(parent),kill_(kill){}private:std::condition_variablecv_

c++ - 带有自定义删除器的 std::shared_ptr 的 Typedef 别名

我想为std::shared_ptr创建别名使用自定义删除器。此代码有效,但仅适用于唯一指针。我收到有关标有[1]的行的无效模板参数数量的错误。我注意到std::unique_ptr的模板和ctor参数和std::shared_ptr与所列不同here和here我注意到这个问题可能与this重复,但我不知道如何解决我的问题#include#includetemplatestructDeleter{voidoperator()(T*p)constnoexcept{p->Drop();//SFINAE};};templateusingmy_unique_ptr=std::unique_pt

c++ - 在此上下文中的完美转发和 std::move 行为

我是C++新手,我想了解完美转发如何与std::move结合使用.我定义了一个std::vectorqueue()我想使用模板函数填充fillWithData.由于我花了一些时间研究完美转发,所以我首先要检查我是否理解正确,其次要弄清楚move是什么。在此上下文中的行为。fillWithData是一个可变参数模板函数,感谢forward,能够通过折叠规则将参数视为左值或右值。(Q1-是否正确?)templatestaticvoidfillWithData(Container&oDataContainer,Args&&...args)//universalreference{typede

c++ - static_cast<T&&>(t) 编译速度比 std::forward<T>(t) 快?

最近,我在这里阅读了range-v3的提交评论:https://github.com/ericniebler/range-v3/commit/a4829172c0d6c43687ba213c54f430202efd7497提交消息说,marginallyimprovecompiletimesbyreplacingstd::forwardwithstatic_cast我知道std::forward(t)返回static_cast(t),按照标准。我也知道有时static_cast(t)当T&&t时会正常工作是通过引用折叠规则的通用引用(或转发引用)。我感兴趣的是提交消息说static_c